package com.ly.base.chapter02.DDDhigherFunc;

import java.util.List;
import java.util.ListIterator;
import java.util.function.Consumer;

/**
 * 高阶函数:
 *
 */
public class HigherFuncDemo1 {
    /**
     * 程序的入口点。
     * 创建一个包含整数的列表，并对其进行反向遍历，将每个元素打印出来。
     * 使用了函数式编程的特性，通过Lambda表达式将打印操作作为参数传递给hiOrder方法。
     *
     * @param args 命令行参数，本程序中未使用。
     */
    public static void main(String[] args) {
        List<Integer> list = List.of(1,2,3,4,5,6,7);
        // 需求：逆序遍历集合，只想负责元素处理，不改变集合
        hiOrder(list, System.out::println);
    }

    /**
     * 对列表中的元素进行反向遍历，并对每个元素应用提供的操作。
     * 此方法展示了函数式编程的风格，通过Consumer接口将操作作为参数传递。
     *
     * @param list 要遍历的列表。
     * @param consumer 应用到每个列表元素的操作。
     *                 Consumer是一个函数接口，代表了一个接受单个输入参数的操作，没有返回值。
     *                 这里使用Lambda表达式指定了具体的打印操作。
     * @param <T> 列表和消费者操作所处理的元素的类型。
     */
    public static <T> void hiOrder(List<T> list, Consumer<T> consumer){
        // 从列表末尾开始迭代。
        ListIterator<T> iterator = list.listIterator(list.size());
        while (iterator.hasPrevious()){
            T value = iterator.previous();
            // 应用提供的消费者操作。
            consumer.accept(value);
        }
    }


}
